package main

import (
	"context"
	"fmt"
	"golang.org/x/net/http2"
	"log"
	"net/http"
)

func main() {
	// 创建一个HTTP/2客户端
	client := &http.Client{
		Transport: &http2.Transport{},
	}

	// 发送一个HTTP/2 GET请求
	req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, "https://example.com", nil)
	if err != nil {
		log.Fatal(err)
	}

	resp, err := client.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	// 在这里，我们假设你已经有了一个流ID，你需要发送RST_STREAM帧
	streamID := uint32(1)            // 示例流ID，实际中需要根据你的情况获取
	errorCode := http2.ErrCodeCancel // 示例错误码，可以根据需要选择

	// 获取底层连接
	conn, err := client.Transport.(*http2.Transport).ConnForRequest(req)
	if err != nil {
		log.Fatal(err)
	}

	// 发送RST_STREAM帧
	frame := http2.FrameRSTStream{
		StreamID:  streamID,
		ErrorCode: errorCode,
	}
	err = conn.WriteFrame(frame)
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("RST_STREAM frame sent")
}
